package com.yeti.repository;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import com.yeti.domain.Cliente;
import com.yeti.domain.Producto;

@Repository(value = "productoDao")
public class ProductoDAOImpl implements ProductoDAO {

	private static final long serialVersionUID = -2113618745189446381L;
	private EntityManager em = null;

    @PersistenceContext
    public void setEntityManager(EntityManager em) {
        this.em = em;
    }
    
	/**
	 * Metodo que actualiza la informacion de un producto de la base de datos.
	 * 
	 * @param p: Es el producto a actualizar.
	 * @return devuelve true si la operacion se produce correctamente o false en caso contrario.
	 */
	@Override
	public boolean updateProducto(Producto p) {
    	try{
    		em.merge(p);
    	}catch(Exception e){
    		System.out.println(e);
    		return false;
    	}
    	return true;
	}

	/**
	 * Metodo que agrega un prducto en la base de datos.
	 * 
	 * @param p: Es el producto a agregar.
	 * @return devuelve true si la operacion se produce correctamente o false en caso contrario.
	 */
	@Override
	public boolean addProducto(Producto p) {
		try{
			em.persist(p);
			return true;
		}catch(Exception e){
			System.out.println(e);
			return false;
		}
	}

	/**
	 * Metodo que elimina a un producto de la base de datos.
	 * 
	 * @param p: Es el producto a eliminar.
	 * @return devuelve true si la operacion se produce correctamente o false en caso contrario.
	 */
	@Override
	public boolean remProducto(Producto p) {
		try{
			em.remove(em.merge(p));
		}catch(Exception e){
			System.out.println(e);
			return false;
		}
		return true;
	}

	/**
	 * Metodo devuelve un producto dado su id.
	 * 
	 * @param idProducto: Es el id del producto a obtener.
	 * @return devuelve el producto en caso de encontrarlo, null en caso de no encontrarlo.
	 */
	@Override
	public Producto getProducto(int idProducto) {
		try{
			return (Producto)em.find(Producto.class, idProducto);
		}catch(Exception e){
			System.out.println(e);
			return null;
		}
	}


}
